home *** CD-ROM | disk | FTP | other *** search
- /*
- ** GadTools layout toolkit
- **
- ** Copyright © 1993-1999 by Olaf `Olsen' Barthel
- ** Freely distributable.
- **
- ** :ts=4
- */
-
- #ifndef _GTLAYOUT_GLOBAL_H
- #include "gtlayout_global.h"
- #endif
-
- /*****************************************************************************/
-
- #include <exec/memory.h>
- #include <libraries/locale.h>
-
- #include <clib/alib_protos.h> /* For NewList */
-
- #include <clib/locale_protos.h>
- #include <pragmas/locale_pragmas.h>
-
- /*****************************************************************************/
-
- #include "Assert.h"
-
- /*****************************************************************************/
-
- STATIC struct LocaleBase * LocaleBase;
- STATIC struct Locale * DefaultLocale;
-
- /*****************************************************************************/
-
-
- /****** gtlayout.library/LT_Init ******************************************
- *
- * NAME
- * LT_Init -- Initialize user interface code.
- *
- * SYNOPSIS
- * LT_Init();
- *
- * VOID LT_Init(VOID);
- *
- * FUNCTION
- * You need to initialize the user interface code only once,
- * so it can set up its internals, open libraries, etc.
- * The code has to be initialized before any user interface
- * creation can take place.
- *
- * NOTES
- * This function is not present in the shared library, only
- * in the link library. You need not and cannot invoke it in
- * the shared library.
- *
- * SEE ALSO
- * gtlayout.library/LT_Exit
- *
- ******************************************************************************
- *
- */
-
- /*****************************************************************************/
-
- struct LibraryInitEntry
- {
- BOOL MustOpen;
- STRPTR Name;
- struct Library ** Library;
- };
-
- struct ClassInitEntry
- {
- STRPTR ClassName;
- LONG InstanceSize;
- HOOKFUNC Dispatcher;
- Class ** ClassPtr;
- };
-
- /*****************************************************************************/
-
- BOOL LIBENT
- LT_Init(VOID)
- {
- BOOL success = TRUE;
-
- #ifndef LINK_LIB
- {
- extern struct Library __far * AbsExecBase;
-
- SysBase = AbsExecBase;
- }
- #endif // LINK_LIB
-
- if(SysBase == NULL || SysBase->lib_Version < 37)
- {
- success = FALSE;
- }
- else
- {
- STATIC struct LibraryInitEntry InitTable[] =
- {
- TRUE, "intuition.library", &IntuitionBase,
- TRUE, "graphics.library", &GfxBase,
- TRUE, "utility.library", &UtilityBase,
- TRUE, "gadtools.library", &GadToolsBase,
- TRUE, "keymap.library", &KeymapBase,
- TRUE, "layers.library", &LayersBase,
- FALSE, "locale.library", (struct Library **)&LocaleBase
- };
-
- STATIC struct ClassInitEntry ClassInitTable[] =
- {
- IMAGECLASS,
- sizeof(ImageInfo),
- (HOOKFUNC)LTP_ImageDispatch,
- <P_ImageClass,
-
- #ifdef DO_LEVEL_KIND
- {
- GADGETCLASS,
- sizeof(struct SliderClassData),
- (HOOKFUNC)LTP_LevelClassDispatcher,
- <P_LevelClass,
- },
- #endif /* DO_LEVEL_KIND */
-
- #ifdef DO_POPUP_KIND
- {
- GADGETCLASS,
- sizeof(PopInfo),
- (HOOKFUNC)LTP_PopupClassDispatcher,
- <P_PopupClass,
- },
- #endif /* DO_POPUP_KIND */
-
- #ifdef DO_TAB_KIND
- {
- GADGETCLASS,
- sizeof(TabInfo),
- (HOOKFUNC)LTP_TabClassDispatcher,
- <P_TabClass,
- },
- #endif /* DO_TAB_KIND */
-
- #ifdef DO_TEXTEDIT_KIND
- {
- GADGETCLASS,
- sizeof(TextEditInfo),
- (HOOKFUNC)LTP_TextEditClassDispatcher,
- <P_TextEditClass,
- },
- #endif /* DO_TEXTEDIT_KIND */
- };
-
- LONG i;
-
- V39 = (BOOLEAN)(SysBase->lib_Version >= 39);
- V40 = (BOOLEAN)(SysBase->lib_Version >= 40);
-
- InitSemaphore(<P_LockSemaphore);
- NewList((struct List *)<P_LockList);
-
- NewList((struct List *)<P_EmptyList);
-
- #ifdef DO_PICKSHORTCUTS
- {
- InitSemaphore(<P_KeySemaphore);
-
- if(!(LTP_Keys[0] = (UBYTE *)AllocMem(512,MEMF_ANY|MEMF_CLEAR)))
- {
- success = FALSE;
- }
- }
- #endif /* DO_PICKSHORTCUTS */
-
- for(i = 0 ; i < NUMELEMENTS(InitTable) ; i++)
- {
- (*InitTable[i].Library) = OpenLibrary(InitTable[i].Name,37);
- if((*InitTable[i].Library) == NULL && InitTable[i].MustOpen)
- {
- success = FALSE;
- }
- }
-
- if(success)
- {
- LTP_NumberFormat = "%ld";
- LTP_DecimalPoint = ".";
-
- if(LocaleBase != NULL)
- {
- /* Guaranteed to open. */
- DefaultLocale = OpenLocale(NULL);
-
- LTP_DecimalPoint = DefaultLocale->loc_DecimalPoint;
-
- if(LocaleBase->lb_SysPatches)
- LTP_NumberFormat = "%lD";
- }
-
- for(i = 0 ; i < NUMELEMENTS(ClassInitTable) ; i++)
- {
- (*ClassInitTable[i].ClassPtr) = MakeClass(NULL,ClassInitTable[i].ClassName,NULL,ClassInitTable[i].InstanceSize,0);
- if((*ClassInitTable[i].ClassPtr) != NULL)
- {
- (*ClassInitTable[i].ClassPtr)->cl_Dispatcher.h_Entry = ClassInitTable[i].Dispatcher;
- }
- else
- {
- success = FALSE;
- break;
- }
- }
- }
- }
-
- if(NO success)
- {
- LT_Exit();
- }
-
- return(success);
- }
-
-
- /*****************************************************************************/
-
-
- /****** gtlayout.library/LT_Exit ******************************************
- *
- * NAME
- * LT_Exit -- Clean up user interface allocations
- *
- * SYNOPSIS
- * LT_Exit();
- *
- * VOID LT_Exit(VOID);
- *
- * FUNCTION
- * When you are finished with user interface creation and
- * do not not need the code any more you should call this
- * routine. It will free all the memory allocated by
- * LT_Init(), close libraries, etc.
- *
- * INPUTS
- * none
- *
- * RESULT
- * none
- *
- * NOTES
- * This function is not present in the shared library, only
- * in the link library. You need not and cannot invoke it in
- * the shared library.
- *
- * SEE ALSO
- * gtlayout.library/LT_Init
- *
- ******************************************************************************
- *
- */
-
- VOID LIBENT
- LT_Exit(VOID)
- {
- if(SysBase != NULL && SysBase->lib_Version >= 37)
- {
- #ifdef DO_PICKSHORTCUTS
- {
- FreeMem(LTP_Keys[0],512);
- LTP_Keys[0] = LTP_Keys[1] = NULL;
- }
- #endif
-
- #ifdef DO_LEVEL_KIND
- {
- if(LTP_LevelClass)
- {
- FreeClass(LTP_LevelClass);
- LTP_LevelClass = NULL;
- }
- }
- #endif /* DO_LEVEL_KIND */
-
- #ifdef DO_POPUP_KIND
- {
- if(LTP_PopupClass)
- {
- FreeClass(LTP_PopupClass);
- LTP_PopupClass = NULL;
- }
- }
- #endif // DO_POPUP_KIND
-
- #ifdef DO_TAB_KIND
- {
- if(LTP_TabClass)
- {
- FreeClass(LTP_TabClass);
- LTP_TabClass = NULL;
- }
- }
- #endif // DO_TAB_KIND
-
- #ifdef DO_TEXTEDIT_KIND
- {
- if(LTP_TextEditClass)
- {
- FreeClass(LTP_TextEditClass);
- LTP_TextEditClass = NULL;
- }
- }
- #endif // DO_TEXTEDIT_KIND
-
- if(LTP_ImageClass)
- {
- FreeClass(LTP_ImageClass);
- LTP_ImageClass = NULL;
- }
-
- if(DefaultLocale)
- {
- CloseLocale(DefaultLocale);
- DefaultLocale = NULL;
- }
-
- CloseLibrary(LocaleBase);
- LocaleBase = NULL;
-
- CloseLibrary(KeymapBase);
- KeymapBase = NULL;
-
- CloseLibrary(GadToolsBase);
- GadToolsBase = NULL;
-
- CloseLibrary(UtilityBase);
- UtilityBase = NULL;
-
- CloseLibrary(GfxBase);
- GfxBase = NULL;
-
- CloseLibrary(IntuitionBase);
- IntuitionBase = NULL;
- }
- }
-